import base64
import os
import ddddocr
import requests
import jsonpath
from config.config import *

def get_auth_captcha():
    """
    :return: 获取验证码接口
    """
    payload={
        "method":"get",
        "url":os.environ["URL"]+"/auth/captcha"
    }
    reponse=requests.request(**payload).json()
    sn=jsonpath.jsonpath(reponse,"$..sn")[0]
    img=jsonpath.jsonpath(reponse,"$..image")[0]
    return sn,img


def dddd_ocr_text(image):
    """
    :param image: 验证码的响应中返回的image所对应的内容
    :return:返回ddddocr识别回来的验证码
    """
    # 将得到的image进行分割，只需要头部和base64编码之后的部分
    encode_data=image.split(",")[1]
    # 将获取的image数据解码base64源数据
    decode_data=base64.b64decode(encode_data)
    # 通过ddddcor来识别图片的源数据
    ocr=ddddocr.DdddOcr() # 实例化ddddocr
    text=ocr.classification(decode_data)
    return text

# 存放sn和验证码文本captcha
sn_captcha_text={}

# 执行的次数
run_nums=0

def get_res_sn_captcha():
    """
    :return: 获取验证码和sn的最终方法
    """
    global run_nums
    # 判断如果是生产环境，则使用ocr识别验证码
    if os.environ["EVN"]=="prod":
        # 如果存放sn和验证码的字典为空或者执行的次数能被2整除时，就执行请求验证码接口和ddddocr识别验证码的方法
        if not sn_captcha_text or run_nums%2==0:
            # 请求获取验证码的接口，并提取接口响应中的sn和image
            sn,image=get_auth_captcha()
            # 将提取出来的image通过ddddocr来识别验证码
            captcha=dddd_ocr_text(image)
            #将获取的sn和captcha分别存储在sn_captcha_text中
            sn_captcha_text["sn"]=sn
            sn_captcha_text["captcha"]=captcha
        run_nums+=1
        return sn_captcha_text

    # 若是test环境，则只需要使用固定验证码
    elif os.environ["EVN"]=="test":
        # 请求获取验证码的接口，只需提取sn
        sn = get_auth_captcha()[0]
        # 将获取的sn和固定验证码分别存储在sn_captcha_text中
        sn_captcha_text["sn"] = sn
        sn_captcha_text["captcha"] ="aaaa"
        return sn_captcha_text



if __name__ == '__main__':
    image=''
    text=dddd_ocr_text(image)
    print(text)
    print(get_res_sn_captcha())

